<?php
/**
 * Created by PhpStorm.
 * User: caoyong
 * Date: 15/3/19
 * Time: 23:23
 */

if (!function_exists('array_column')) {
    /**
     * 为5.5以下的版本定义array_column函数
     *
     * @param array $array
     * @param mixed $column
     * @param null|mixed $index_key
     * @return array
     */
    function array_column(array $array, $column, $index_key = null)
    {
        $result = [];
        foreach ($array as $value) {
            $column_exists = array_key_exists($column, $value);

            if (false === is_array($value) || false === $column_exists) {
                continue;
            }

            $index_key_exists = is_null($index_key) ? false : array_key_exists($index_key, $value);

            if (true === $index_key_exists && false === is_null($value[$index_key])) {
                $result[$value[$index_key]] = $value[$column];
            } else {
                array_push($result, $value[$column]);
            }
        }
        return $result;
    }
}

/**
 * 检测是否为纯索引数组
 * @param array $array
 * @return bool
 */
function isIndexArray(array $array)
{
    foreach (array_keys($array) as $key) {
        if (false === is_numeric($key)) {
            return false;
        }
    }
    return true;
}

/**
 * 检测是否为纯关联数组
 * @param array $array
 * @return bool
 */
function isAssocArray(array $array)
{
    foreach (array_keys($array) as $key) {
        if (true === is_numeric($key)) {
            return false;
        }
    }
    return true;
}

/**
 * @param $data
 * @param $node_name
 * @param null|SimpleXMLElement $xml
 * @return string
 */
function dataToXML($data, $node_name, $xml = null)
{
    is_null($xml) && $xml = simplexml_load_string(sprintf('<%s/>', $node_name));

    foreach ($data as $key => $value) {
        $is_num = false;
        if (is_numeric($key)) {
            $is_num = true;
            $key = $node_name;
        }

        if (is_array($value)) {
            $node = isAssocArray($value) || $is_num ? $xml->addChild($key) : $xml;
            dataToXML($value, $key, $node);
        } else {
            if (is_numeric($value)) {
                $xml->addChild($key, $value);
            } else {
                $dom = dom_import_simplexml($xml->addChild($key));
                $dom->appendChild($dom->ownerDocument->createCDATASection($value));
            }
        }
    }
    return $xml->saveXML();
}
